// 构造菜单项类，可用于初始化菜单项MenuItem组件
class InitMenuItem {
  // 构造简单菜单项（包含id、名称、图标类名）
  constructor(id='', name='', parentId='-1', route='', iconClass='') {
    this.id = id
    this.name = name
    this.route = route  // 路由路径
    this.iconClass = iconClass  // 图标类名
    this.isActive = false  // 是否激活
    this.isDir = false  // 菜单项默认为路由
    this.isOpenDir = false  // 是否展开目录
    this.isCollapsed = false  // 是否缩放菜单项
    this.parentId = parentId
    this.sort = 0  // 排序
  }
  // 初始化路由（与initDir冲突，不可同时调用）
  initRoute(route='') {
    this.isDir = false
    this.route = route
    return this
  }
  // 初始化目录（与initRoute冲突，不可同时调用）
  initDir() {
    this.isDir = true
    return this
  }

  // 设置排序
  setSort(sort=0) {
    this.sort = sort
    return this
  }
  // 设置图标类名
  setIconClass(iconClass='') {
    this.iconClass = iconClass
    return this
  }
  // 设置激活状态
  setActive(actived=false) {
    this.isActive = actived
    return this
  }
  // 设置是否展开目录
  setOpend(opend=false) {
    this.isOpenDir = opend
    return this
  }
  // 设置是否缩放菜单项
  setCollapse(collapsed=false) {
    this.isCollapsed = collapsed
    return this
  }
  // 设置目录折叠后的图标（仅在isDir为true时生效）
  setFoldClosedIcon(icon='i-flowbite-angle-down-outline') {
    this.foldClosedIcon = icon
    return this
  }
  // 设置目录展开后的图标（仅在isDir为true时生效）
  setFoldOpenedIcon(icon='i-flowbite-angle-up-outline') {
    this.foldOpenedIcon = icon
    return this
  }

  getChildren = (menuItems) => {
    let children = []
    // 如果menuItemes非法，则返回空数组
    if (!menuItems || menuItems.length === 0) {
      return children
    }
    return menuItems.filter(item => item.parentId === this.id)
  }
  getSortedChildren(menuItems) {
    let children = this.getChildren(menuItems)
    return children.sort((a, b) => a.sort - b.sort)
  }

  // 设置子菜单项
  // setChildren(children=[]) {
  //   this.children = children
  //   return this
  // }
}

export { InitMenuItem }